#ifndef LINKED_LIST_H
#define LINKED_LIST_H
#include "../../tools/headers/common.h"
#include "../../memory/headers/kheap.h"
#include "../../api/headers/errors.h"

#define LIST_ERROR 0xFFFFFFFF

typedef struct linked_list_element_struct
{
	u32int data;
	struct linked_list_element_struct* next;
} linked_list_element;


typedef struct linked_list_type_struct
{
	linked_list_element* first;
	linked_list_element* last;
	u32int count;
	BOOL looped;
	linked_list_element* current;
	
} linked_list_type;



linked_list_type* create_linked_list(BOOL looped);
void destroy_linked_list(linked_list_type* list);
void add_to_list_end(u32int data, linked_list_type* list);
u32int get_list_element(u32int index, linked_list_type* list);
u32int get_next_from_list(BOOL* end, linked_list_type* list);
u32int remove_from_list(u32int index, linked_list_type* list);
u32int get_last_from_list(linked_list_type* list);
u32int get_first_from_list(linked_list_type* list);
u32int get_number_of_list_elements(linked_list_type* list);
u32int find_in_list(u32int data, linked_list_type* list);
#endif